package work.linruchang.oauthresourceproject.config.oauth;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;

/**
 * Token信息
 *
 * @author LinRuChang
 * @version 1.0
 * @date 2022/08/21
 * @since 1.8
 **/
@Data
@Builder
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class TokenInfo implements Serializable {

    private static final long serialVersionUID = -2993647977843638732L;
    /**
     * 访问资源服务器的令牌
     */
    String access_token;

    /**
     * 客户端如何携带资源
     * 参考{@link TokenType#token_type_bearer}
     */
    String token_type;

    /**
     * token过期时间长度-秒
     * 【注意非时间点】
     *
     * 过期规则类型：cookie一样，不会动态刷新过期时间的哦
     */
    Long expires_in;

    /**
     * 刷新token，用于由于access_token过期，利用这个密钥用于生成新的access_token、以及refresh_token
     *
     * 如果refresh_token也过期了，则重新进行oauth认证
     */
    String refresh_token;

    /**
     * refresh_token的过期时间长度-秒
     * 【注意非时间点】
     *
     * 一般是【expires_in】的两倍
     */
    Long expires_in_refresh;


    /**
     * 访问令牌创建时间 == 仅由服务器知道，不会传给前端
     */
    @JsonIgnore
    Date createTime;

}
